package com.example.certificate.service;

import com.aliyuncs.exceptions.ClientException;
import com.example.certificate.dto.*;
import com.example.certificate.dto.common.DelByIdDto;
import com.example.certificate.entity.OrgUser;
import com.example.certificate.entity.User;
import com.baomidou.mybatisplus.extension.service.IService;
import com.example.certificate.execption.BusinessException;
import com.example.certificate.utils.ResultEntity;
import org.springframework.web.bind.annotation.RequestBody;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * <p>
 * 用户登陆信息数据表 服务类
 * </p>
 */
public interface UserService extends IService<User> {
    /**
     * 用户登录功能
     * @param dto
     * @return
     */
    String login(LoginDTO dto) throws BusinessException;

    /**
     * 发送手机验证码
     * @param dto
     */
    String sendSms(SendSmsDTO dto) throws ClientException, BusinessException;

    /**
     * 更新登录密码
     * @param dto
     */
    void updatePass(UpdatePassDto dto) throws BusinessException;

    /**
     * @Description  用户注册功能
     **/
    void registerInfo(RegisterDto dto) throws BusinessException;


    /**
     * @Description  完善用户信息
     **/
    void perfectData(PerfectInfoDto dto);

    /**
     * @Description  根据用户id删除数据
     **/
    ResultEntity delByUserId(DelByIdDto dto);

    /**
     * @Description  修改用户信息
     * @return com.example.certificate.utils.ResultEntity
     **/
    ResultEntity updateUserInfo(OrgUser dto);

    /**
     * @Description  查询用户基本信息
     * @return com.example.certificate.utils.ResultEntity
     **/
    ResultEntity selBaseInfo(String userId);

    /**
     * @Description  修改用户权限
     * @Param [userId]
     * @return com.example.certificate.utils.ResultEntity
     **/
    ResultEntity updateUserRole(ManagementDto dto);

    /**
     * @Description  新增
     * @Param [dto]
     * @return com.example.certificate.utils.ResultEntity
     **/
    ResultEntity insertUser(InsertRegisterDto dto) throws BusinessException;

    //修改用户状态
    ResultEntity updateStatus(UpdateStatusDTO dto);
}
